#include "widget.h"
#include "ui_widget.h"
#include <QTimer>
#include <QDebug>
#include <thread>

//另起⼀个线程,在新线程中完成循环+sleep
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    std::thread t([this] {
        int value = ui->lcdNumber->intValue();
        while (true) {
            std::this_thread::sleep_for(std::chrono::seconds(1));
            if(value <= 0) {
                break;
            }
            ui->lcdNumber->display(value - 1);
        }
    });

}

// 循环+sleep
//Widget::Widget(QWidget *parent)
//    : QWidget(parent)
//    , ui(new Ui::Widget)
//{
//    ui->setupUi(this);

//    int value = ui->lcdNumber->intValue();
//    while (true) {
//        std::this_thread::sleep_for(std::chrono::seconds(1));
//        if(value <= 0) {
//            break;
//        }
//        ui->lcdNumber->display(value - 1);
//    }

//}

//Widget::Widget(QWidget *parent)
//    : QWidget(parent)
//    , ui(new Ui::Widget)
//{
//    ui->setupUi(this);

//    // 创建 QTimer 实例
//    timer = new QTimer(this);
//    // 连接信号槽， QTimer 每隔一定的时间触发一个 timeout 信号，现在
//    // 把 timeout 信号 和 updateTime 连接起来。
//    // 此时意味着每次触发 timeout 信号都会伴随 updateTime 函数的执行
//    connect(timer, &QTimer::timeout, this, &Widget::updateTime);
//    // 启动 QTimer,  并且规定每隔 1000ms 触发一次 timeout 信号
//    timer->start(1000);
//}

Widget::~Widget()
{
    delete ui;
}

void Widget::updateTime()
{
    qDebug() << "updateTime";

    int value = ui->lcdNumber->intValue();
    if(value <= 0) {
        // 如果时间到， 停止定时器
        timer->stop();
        return;
    }
    ui->lcdNumber->display(value - 1);
}

